package edu.njfu.networkdemo.network

import edu.njfu.networkdemo.service.StudentService
import edu.njfu.networkdemo.utils.ServerCreator
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import java.lang.RuntimeException
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine

object StudentNetwork{
    private val studentService=ServerCreator.create<StudentService>()
    suspend fun getStudentData()= studentService.getStudentData().await()
    private suspend fun  <T> Call<T>.await():T{
        return suspendCoroutine {
                continuation ->
            enqueue(object : Callback<T> {
                override fun onResponse(
                    call: Call<T>,
                    response: Response<T>
                ) {
                    val body = response.body()
                    if(body!=null){
                        continuation.resume(body)
                    }else {
                        continuation.resumeWithException(
                            RuntimeException("Response body is null")
                        )
                    }
                }

                override fun onFailure(call: Call<T>, t: Throwable) {
                    continuation.resumeWithException(t)
                }
            })
        }
    }
}